home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 003 / creator.arc / COMPILER.BAS (.txt) < prev    next >
Encoding:
GW-BASIC  |  1985-08-27  |  11.0 KB  |  363 lines

  1. 10  ' ADVENTURE SYSTEM DATABASE COMPILER 2.1
  2. 15  '
  3. 20  ' last revision 3/1/83 by JRC
  4. 25  '
  5. 30  ' This version (2.1) is not completely compatible with version 2.0; verbs
  6. 35  '   must have a number after them. Modify previous source files by putting
  7. 37  '   a ,0 after the verb. For other limitations, see the .DOC file.
  8. 40  '
  9. 50  ' Peter F. Levy              Jim R. Cummins
  10. 60  ' 4209 Longmeadow Way        5 Jacob St.
  11. 70  ' Fort Worth, TX 76133       Ballston Lake, NY 12019
  12. 80  ' (817) 292-8731             CompuServe  [72155,1174]
  13. 90  ' WARNING FROM MIKE......THIS PROGRAM SEEMS TO BE FAIRLY BUGGY
  14. 100  KEY OFF:DEFINT A-Z:FALSE=0:TRUE=NOT FALSE
  15. 109  '  Next line determines the type of monitor - works with PC/DOS 1.10
  16. 110  DEF SEG=0:WTH=PEEK(&H410) AND &H30:DEF SEG
  17. 120  IF WTH=&H30 THEN WTH=80:CGCARD=FALSE ELSE CGCARD=TRUE:IF WTH=&H20 THEN WTH=80 ELSE WTH=40
  18. 129  ' Modify the next line to set your own color scheme
  19. 130  SCREEN 0,1:FGD=6:BGD=1:BRD=1:COLOR FGD,BGD,BRD:WIDTH WTH:CLS
  20. 140  PRINT "ADVENTURE SYSTEM DATABASE COMPILER 2.1":PRINT
  21. 150  PRINT "Written by Peter F. Levy":PRINT TAB(12)"4209 Longmeadow Way"
  22. 160  PRINT TAB(12)"Fort Worth, TX 76133":PRINT TAB(12)"(817) 292-8731"
  23. 170  PRINT:PRINT"Modified and Adapted for the":PRINT"<<<IBM Personal Computer>>> by"
  24. 180  PRINT TAB(12)"Jim R. Cummins":PRINT TAB(12)"5 Jacob St."
  25. 190  PRINT TAB(12)"Ballston Lake, NY 12019"
  26. 200  PRINT TAB(12)"CompuServe  [72155,1174]":PRINT
  27. 210  ON ERROR GOTO 20060
  28. 220  INPUT;"Database name? ";F$:IF F$="" THEN 220
  29. 230  PRINT" on which drive? (A-D) ";:CD1$=INPUT$(1):PRINT CD1$
  30. 240  IF INSTR("AaBbCcDd",CD1$) THEN CD1$=CD1$+":" ELSE CD1$=""
  31. 250  PRINT"Compilation drive? (A-D) ";:CD$=INPUT$(1):PRINT CD$
  32. 260  IF INSTR("AaBbCcDd",CD$) THEN CD$=CD$+":" ELSE CD$=""
  33. 270  PRINT "Hard copy of compilation messages? (Y/N) ";:HC$=INPUT$(1)
  34. 280  PRINT HC$:IF INSTR("Yy",HC$) THEN PRT=TRUE ELSE PRT=FALSE
  35. 300  DIM VS$(8),NS$(8),TS$(2)
  36. 310  FOR I=1 TO 8
  37. 320  VS$(I)=STRING$(255,32)
  38. 330  NS$(I)=VS$(I)
  39. 340  NEXT I
  40. 350  NL$=STRING$(255,0):VL$=NL$
  41. 360  TS$(1)=STRING$(255,32)
  42. 365  TS$(2)=TS$(1)
  43. 370  TN$=STRING$(100,0)
  44. 380  DEF FNEW$(X)="*** ERROR"+STR$(X)+" -- "
  45. 390  RESTORE  ' Get Tokens
  46. 400  FOR K=1 TO 100
  47. 410  READ TK$:IF TK$="*END" THEN K=100:GOTO 460
  48. 420  I=1-(K>50)
  49. 430  J=5*(K-50*(I-1))-2
  50. 440  MID$(TS$(I),J,4)=TK$
  51. 450  MID$(TN$,K,1)=CHR$(K)
  52. 460  NEXT K
  53. 470  PRINT
  54. 480  PRINT "Setting up files"
  55. 490  OPEN "I",1,CD1$+F$+".ADV"
  56. 510  OPEN "O",2,CD$+F$+".DAT"
  57. 520  OPEN "R",3,CD$+F$+".REF",32
  58. 530  FIELD#3,32 AS AO$
  59. 540  REC.LOC=2  '  Save space for disassemble info.
  60. 550  VERSION$="IBMPC Ver 2.1(c)1983 JR Cummins"
  61. 560  ON ERROR GOTO 20000
  62. 1000  '
  63. 1010  ' COMPILE STARTUP TEXT
  64. 1020  ' --------------------
  65. 1030  PRINT "Compiling startup header"
  66. 1040  IF PRT THEN LPRINT "Compiling startup header"
  67. 1050  GOSUB 13000
  68. 1060  IF AS$="" THEN PRINT#2,CHR$(255):GOTO 2000
  69. 1090  PRINT#2,AS$;
  70. 1100  GOTO 1050
  71. 2000  '
  72. 2010  ' COMPILE VERB LIST
  73. 2020  ' -----------------
  74. 2030  PRINT "Compiling verb table"
  75. 2040  IF PRT THEN LPRINT "Compiling verb table"
  76. 2050  FOR K=1 TO 199
  77. 2060  INPUT #1,A$
  78. 2070  IF A$="" THEN 2200
  79. 2080  INPUT #1,AL
  80. 2090  MID$(VL$,K,1)=CHR$(AL+32)
  81. 2100  I=1+FIX((K-1)/25)
  82. 2110  J=10*(K-25*(I-1))-8
  83. 2120  MID$(VS$(I),J,9)=A$
  84. 2130  NEXT K:ER=ER+1:PRINT FNEW$(ER);"Too many verbs"
  85. 2140  IF PRT THEN LPRINT FNEW$(ER);"Too many verbs"
  86. 2150  INPUT #1,V$:IF V$="" THEN 2200 ELSE INPUT #1,AL:GOTO 2150
  87. 2200  FOR I=1 TO 8:PRINT#2,VS$(I);:NEXT:PRINT#2,VL$;
  88. 2300  NVERBS=K:PRINT NVERBS-1;" verbs compiled."
  89. 2310  IF PRT THEN LPRINT NVERBS-1;" verbs compiled."
  90. 3000  '
  91. 3010  ' COMPILE NOUN LIST AND LINKS
  92. 3020  ' ---------------------------
  93. 3030  PRINT "Compiling noun and link table"
  94. 3040  IF PRT THEN LPRINT "Compiling noun and link table"
  95. 3050  FOR K=1 TO 199
  96. 3060  INPUT #1,N$
  97. 3070  IF N$="" THEN 3200
  98. 3080  INPUT #1,AL
  99. 3090  MID$(NL$,K,1)=CHR$(AL+32)
  100. 3100  I=1+FIX((K-1)/25)
  101. 3110  J=10*(K-(25*(I-1)))-8
  102. 3120  MID$(NS$(I),J,9)=N$
  103. 3130  NEXT K:ER=ER+1:PRINT FNEW$(ER);"Too many nouns"
  104. 3140  IF PRT THEN LPRINT FNEW$(ER);"Too many nouns"
  105. 3150  INPUT #1,N$:IF N$="" THEN 3200 ELSE INPUT #1,AL:GOTO 3150
  106. 3200  FOR I=1 TO 8:PRINT#2,NS$(I);:NEXT:PRINT#2,NL$;
  107. 3300  NNOUNS=K:PRINT NNOUNS-1;" nouns compiled."
  108. 3310  IF PRT THEN LPRINT NNOUNS-1;" nouns compiled."
  109. 3400  DIM NDX(NVERBS*NNOUNS+768)
  110. 4000  '
  111. 4010  ' COMPILE OBJECT TABLE
  112. 4020  ' --------------------
  113. 4030  PRINT "Compiling object table"
  114. 4040  IF PRT THEN LPRINT "Compiling object table"
  115. 4045  OS$=SPACE$(32)
  116. 4050  FOR K=1 TO 255
  117. 4060  INPUT #1,Z
  118. 4070  IF Z=0 THEN 4300 ELSE IF Z=K THEN 4100
  119. 4080  ER=ER+1:PRINT FNEW$(ER);"Object number";Z;"sequence mismatch"
  120. 4090  IF PRT THEN LPRINT FNEW$(ER);"Object number";Z;"sequence mismatch"
  121. 4100  INPUT #1,OB$:INPUT #1,SR,WT,VA
  122. 4110  LSET OS$=STRING$(2,SR)+CHR$(WT)+CHR$(VA)+STRING$(2,0)+OB$
  123. 4120  PRINT #2,OS$;
  124. 4130  GOSUB 13000
  125. 4160  X=NDX(Z):IF X=0 THEN 4190
  126. 4170  ER=ER+1:PRINT FNEW$(ER);"Duplicate object number";Z
  127. 4180  IF PRT THEN LPRINT FNEW$(ER);"Duplicate object number";Z
  128. 4190  X=REC.LOC+1:NDX(Z)=X
  129. 4200  GOSUB 12000
  130. 4210  X=REC.LOC:NDX(Z)=NDX(Z)*8+X-NDX(Z)
  131. 4220  NEXT K:ER=ER+1:PRINT FNEW$(ER);"Too many objects"
  132. 4230  IF PRT THEN LPRINT FNEW$(ER);"Too many objects"
  133. 4240  INPUT #1,Z:IF Z<>0 THEN LINE INPUT OB$:GOTO 4240
  134. 4300  PRINT #2,STRING$(32,255);
  135. 4310  NOBJ=K:PRINT NOBJ-1;" objects compiled."
  136. 4320  IF PRT THEN LPRINT NOBJ-1;" objects compiled."
  137. 5000  '
  138. 5010  ' COMPILE ROOM TABLE
  139. 5020  ' ------------------
  140. 5030  PRINT "Compiling room and link table"
  141. 5040  IF PRT THEN LPRINT "Compiling room and link table"
  142. 5045  RS$=SPACE$(32)
  143. 5050  INPUT #1,SR
  144. 5060  PRINT #2,CHR$(SR);
  145. 5070  FOR K=1 TO 254
  146. 5080  INPUT #1,RN:Z=RN+256
  147. 5090  IF RN=0 THEN 5300 ELSE IF RN=K THEN 5120
  148. 5100  ER=ER+1:PRINT FNEW$(ER);"Room number";RN;"sequence mismatch"
  149. 5110  IF PRT THEN LPRINT FNEW$(ER);"Room number";RN;"sequence mismatch"
  150. 5120  INPUT #1,RM$:INPUT #1,N,S,E,W,U,D
  151. 5130  LSET RS$=CHR$(N)+CHR$(S)+CHR$(E)+CHR$(W)+CHR$(U)+CHR$(D)+RM$
  152. 5140  PRINT #2,RS$;
  153. 5150  GOSUB 13000
  154. 5180  X=NDX(Z):IF X=0 THEN 5210
  155. 5190  ER=ER+1:PRINT FNEW$(ER);"Duplicate room number";RN
  156. 5200  IF PRT THEN LPRINT FNEW$(ER);"Duplicate room number";RN
  157. 5210  X=REC.LOC+1:NDX(Z)=X
  158. 5220  GOSUB 12000
  159. 5230  X=REC.LOC:NDX(Z)=NDX(Z)*8+X-NDX(Z)
  160. 5240  NEXT K:ER=ER+1:PRINT FNEW$(ER);"Too many rooms"
  161. 5250  IF PRT THEN LPRINT FNEW$(ER);"Too many rooms"
  162. 5260  INPUT #1,RN:IF RN<>0 THEN LINE INPUT RM$:GOTO 5260
  163. 5300  PRINT #2,STRING$(32,255);
  164. 5310  NROOM=K:PRINT NROOM-1;" rooms compiled."
  165. 5320  IF PRT THEN LPRINT NROOM-1;" rooms compiled."
  166. 6000  '
  167. 6010  ' COMPILE MESSAGE TABLE
  168. 6020  ' ---------------------
  169. 6030  PRINT "Compiling message table"
  170. 6040  IF PRT THEN LPRINT "Compiling message table"
  171. 6050  FOR K=1 TO 255
  172. 6060  INPUT #1,MN:Z=K+512
  173. 6070  IF MN=0 THEN 6500 ELSE IF MN=K THEN 6100
  174. 6080  ER=ER+1:PRINT FNEW$(ER);"Message number";MN;"sequence mismatch"
  175. 6090  IF PRT THEN LPRINT FNEW$(ER);"Message number";MN;"sequence mismatch"
  176. 6100  GOSUB 13000
  177. 6130  X=NDX(Z):IF X=0 THEN 6160
  178. 6140  ER=ER+1:PRINT FNEW$(ER);"Duplicate message number";MN
  179. 6150  IF PRT THEN LPRINT FNEW$(ER);"Duplicate message number";MN
  180. 6160  X=REC.LOC+1:NDX(Z)=X
  181. 6170  GOSUB 12000
  182. 6180  X=REC.LOC:NDX(Z)=NDX(Z)*8+X-NDX(Z)
  183. 6190  NEXT K:ER=ER+1:PRINT FNEW$(ER);"Too many messages"
  184. 6200  IF PRT THEN LPRINT FNEW$(ER);"Too many messages"
  185. 6500  NMESG=K:PRINT NMESG-1;" messages compiled."
  186. 6510  IF PRT THEN LPRINT NMESG-1;" messages compiled."
  187. 7000  '
  188. 7010  ' COMPILE IMPLICIT(OR AUTO) ACTIONS
  189. 7020  ' ---------------------------------
  190. 7030  K=0:PRINT "Compiling implicit action table"
  191. 7040  IF PRT THEN LPRINT "Compiling implicit action table"
  192. 7050  LINE INPUT #1,AC$
  193. 7060  IF AC$="" THEN 7400
  194. 7070  AS$="":K=K+1:GOSUB 11070
  195. 7080  A$=RIGHT$(AC$,2)
  196. 7090  IF A$<>" ." AND A$<>" ," THEN GOSUB 21000
  197. 7100  GOSUB 11000
  198. 7110  IF T$="." THEN 7200
  199. 7120  IF T$="," THEN 7220
  200. 7130  GOSUB 10000
  201. 7140  GOTO 7100
  202. 7200  PRINT #2,AS$+CHR$(0);
  203. 7210  GOTO 7050
  204. 7220  LINE INPUT #1,AC$
  205. 7230  A$=RIGHT$(AC$,2)
  206. 7240  IF A$<>" ." AND A$<>" ," THEN GOSUB 21000
  207. 7250  GOSUB 11070
  208. 7260  GOTO 7100
  209. 7400  PRINT #2,CHR$(255);
  210. 7410  NAUTO=K+1:PRINT K;" implicit actions compiled."
  211. 7420  IF PRT THEN LPRINT K;" implicit actions compiled."
  212. 8000  '
  213. 8010  ' LOAD & COMPILE EXPLICIT ACTION TABLE
  214. 8020  ' ------------------------------------
  215. 8030  K=0:PRINT "Compiling explicit action table"
  216. 8035  IF PRT THEN LPRINT "Compiling explicit action table"
  217. 8040  LINE INPUT #1,AC$
  218. 8050  IF AC$="" THEN 8800
  219. 8060  AS$="":K=K+1:GOSUB 11070
  220. 8070  ' EXTRACT VERB & NOUN, TRUNCATE AC$
  221. 8080  GOSUB 11000:V$=MID$(T$,1,9)
  222. 8090  GOSUB 11000:N$=MID$(T$,1,9)
  223. 8100  A$=RIGHT$(AC$,2)
  224. 8110  IF A$<>" ." AND A$<>" ," THEN GOSUB 21000:PRINT TAB(15);V$;" ";N$
  225. 8120  ' GET VERB NUMBER
  226. 8130  V=0:I=1
  227. 8140  J=INSTR(VS$(I)," "+V$+" ")
  228. 8150  IF J=0 AND I<8 THEN I=I+1: GOTO 8140
  229. 8160  IF J>0 AND I<9 THEN V=1+FIX(J/10)+25*(I-1)
  230. 8170  IF V>0 THEN 8200
  231. 8180  ER=ER+1:PRINT FNEW$(ER);"Bad verb -- ";V$
  232. 8190  IF PRT THEN LPRINT FNEW$(ER);"Bad verb -- ";V$
  233. 8200  ' Get NOUN number
  234. 8210  N=0:I=1
  235. 8220  J=INSTR(NS$(I)," "+N$+" ")
  236. 8230  IF J=0 AND I<8 THEN I=I+1: GOTO 8220
  237. 8240  IF J>0 AND I<9 THEN N=1+FIX(J/10)+25*(I-1)
  238. 8250  IF N>0 OR N$="ANY" THEN 8300
  239. 8260  ER=ER+1:PRINT FNEW$(ER);"Bad noun -- ";N$
  240. 8270  IF PRT THEN LPRINT FNEW$(ER);"Bad noun -- ";N$
  241. 8300  ' Calculate and place INDEX byte pair
  242. 8310  Y=NNOUNS*V+N:IF Y>0 THEN IF Y>YMAX THEN YMAX=Y:GOTO 8400 ELSE 8400
  243. 8320  ER=ER+1:PRINT FNEW$(ER);"Zero action index code ";V$;" ";N$: GOTO 8040
  244. 8330  IF PRT THEN LPRINT FNEW$(ER);"Zero action index code ";V$;" ";N$:GOTO 8040
  245. 8400  Z=Y+768:X=NDX(Z):IF X=0 THEN 8430
  246. 8410  ER=ER+1:PRINT FNEW$(ER);"Duplicate action entry -- ";V$;" ";N$
  247. 8420  IF PRT THEN LPRINT FNEW$(ER);"Duplicate action entry -- ";V$;" ";N$
  248. 8430  X=REC.LOC+1:NDX(Z)=X
  249. 8440  GOSUB 11000
  250. 8450  IF T$="." THEN 8500
  251. 8460  IF T$="," THEN 8600
  252. 8470  GOSUB 10000
  253. 8480  GOTO 8440
  254. 8500  AS$=AS$+CHR$(0)
  255. 8510  GOSUB 12000
  256. 8520  X=REC.LOC:NDX(Z)=NDX(Z)*8+X-NDX(Z)
  257. 8530  GOTO 8040
  258. 8600  LINE INPUT #1,AC$
  259. 8610  A$=RIGHT$(AC$,2)
  260. 8620  IF A$<>" ." AND A$<>" ," THEN GOSUB 21000
  261. 8630  GOSUB 11070
  262. 8640  GOTO 8440
  263. 8800  NACTS=K+1:PRINT K;" explicit actions compiled."
  264. 8810  IF PRT THEN LPRINT K;" explicit actions compiled."
  265. 9000  '
  266. 9010  ' END COMPILATION
  267. 9020  ' ---------------
  268. 9030  ' Write INDEX file to disk
  269. 9040  FOR I=1 TO NOBJ:PRINT#2,STR$(NDX(I));:NEXT
  270. 9050  FOR I=1 TO NROOM:PRINT#2,STR$(NDX(I+256));:NEXT
  271. 9060  FOR I=1 TO NMESG:PRINT#2,STR$(NDX(I+512));:NEXT
  272. 9070  FOR I=1 TO YMAX:PRINT#2,STR$(NDX(I+768));:NEXT
  273. 9080  LSET AO$=VERSION$
  274. 9100  AS$=CHR$(NVERBS)+CHR$(NNOUNS)+CHR$(NOBJ)+CHR$(NROOM)+CHR$(NMESG)+CHR$(NAUTO)
  275. 9110  AS$=AS$+CHR$(FIX(NACTS/256))+CHR$(NACTS MOD 256)+CHR$(FIX(YMAX/256))+CHR$(YMAX MOD 256)
  276. 9120  LSET AO$=AS$
  277. 9130  PUT#3,2
  278. 9140  CLOSE
  279. 9150  PRINT "Compilation complete: ";ER;"error(s)."
  280. 9160  IF PRT THEN LPRINT "Compilation complete: ";ER;"error(s)."
  281. 9170  ON ERROR GOTO 0
  282. 9180  END
  283. 10000  '
  284. 10010  ' COMPILE DATA GROUP OR TOKEN
  285. 10020  ' ---------------------------
  286. 10030  V=VAL(T$)
  287. 10040  IF V=0 AND T$<>"0" THEN 10100
  288. 10050  ' DATA: Copy to file & loop
  289. 10060  IF V<0 THEN V=ABS(V)+128
  290. 10070  AS$=AS$+CHR$(V)
  291. 10080  RETURN
  292. 10100  ' TOKEN: Convert to number code & Compile on disk
  293. 10110  S=0:IF T$="" THEN 10250
  294. 10120  IF ASC(T$)=45 THEN S=1:T$=MID$(T$,2,4)
  295. 10130  T1=INSTR(TS$(1),T$)
  296. 10140  IF T1=0 THEN T1=250+INSTR(TS$(2),T$)
  297. 10150  IF T1<>0 AND T1<>250 THEN 10180
  298. 10160  ER=ER+1:PRINT FNEW$(ER);"Bad token -- ";T$
  299. 10170  IF PRT THEN LPRINT FNEW$(ER);"Bad token -- ";T$
  300. 10180  T2=(T1-1)/5+1
  301. 10190  IF T2=0 THEN T3=0: GOTO 10220
  302. 10200  T3=ASC(MID$(TN$,T2,1))
  303. 10210  T3=T3+128*S
  304. 10220  AS$=AS$+CHR$(T3)
  305. 10230  RETURN
  306. 10250  ER=ER+1:PRINT FNEW$(ER);"Null token"
  307. 10260  IF PRT THEN LPRINT FNEW$(ER);"Null token"
  308. 10270  RETURN
  309. 11000  '
  310. 11010  ' EXTRACT A TOKEN FROM STRING AC$ & TRUNCATE AC$
  311. 11020  ' ----------------------------------------------
  312. 11030  A=INSTR(AC$," ")
  313. 11040  IF A=0 THEN T$=AC$:AC$="":RETURN
  314. 11050  T$=LEFT$(AC$,A-1)
  315. 11060  AC$=RIGHT$(AC$,LEN(AC$)-A)
  316. 11070  IF ASC(AC$)=32 THEN AC$=RIGHT$(AC$,LEN(AC$)-1): GOTO 11070
  317. 11080  RETURN
  318. 12000  '
  319. 12010  '   PUT RECORDS IN RANDOM FILE
  320. 12020  '   --------------------------
  321. 12030  LSET AO$=AS$
  322. 12040  REC.LOC=REC.LOC+1
  323. 12050  PUT #3,REC.LOC
  324. 12060  IF LEN(AS$)>32 THEN AS$=RIGHT$(AS$,LEN(AS$)-32):GOTO 12030
  325. 12070  RETURN
  326. 13000  '
  327. 13010  '   READ TEXT DESCRIPTIONS AND REPLACE "/" WITH <LF>
  328. 13020  '   ------------------------------------------------
  329. 13030  LINE INPUT #1,AS$
  330. 13040  I=INSTR(AS$,"/")
  331. 13050  IF I THEN MID$(AS$,I,1)=CHR$(10):GOTO 13040
  332. 13060  RETURN
  333. 20000  '
  334. 20010  ' ERROR TRAP
  335. 20020  ' ----------
  336. 20030  IF ERR=27 THEN PRT=FALSE:PRINT"Printer Out of Paper.":RESUME NEXT
  337. 20040  IF ERR=62 THEN PRINT"End of Source File.":RESUME 9000
  338. 20050  IF ERR=61 OR ERR=67 THEN PRINT"Disk Full. Change Disk and Recompile.":ON ERROR GOTO 0
  339. 20060  IF ERR=53 THEN PRINT"File Not Found.":PRINT"Insert proper disk and press any key to continue.":AS$=INPUT$(1):RESUME
  340. 20070  IF ERR=70 OR ERR=71 THEN PRINT"Disk write protected or not ready.":PRINT"Press any key when ready.":AS$=INPUT$(1):RESUME
  341. 20200  PRINT"Unrecoverable Error"
  342. 20210  ON ERROR GOTO 0
  343. 21000  ER=ER+1:PRINT FNEW$(ER);"Bad action terminator <"A$">"
  344. 21010  PRINT TAB(15),"Action item is terminated."
  345. 21020  AC$=AC$+" ."
  346. 21030  IF NOT PRT THEN RETURN
  347. 21040  LPRINT FNEW$(ER);"Bad action terminator <"A$">"
  348. 21050  LPRINT TAB(15),"Action item is terminated."
  349. 21060  RETURN
  350. 30000  '
  351. 30010  ' TOKEN TABLE
  352. 30020  ' -----------
  353. 30030  DATA HASX,NCRX,AVLX,XINY,NSRX,NR0X,XW/Y
  354. 30040  DATA HASL,NCRL,AVLL,LINY,NSRL,NR0L,LW/X
  355. 30050  DATA RAND,CEQN,CGEN,CEQC,CGEC,XSET,INRX,LIGH,LDGT,OBJ=
  356. 30060  DATA X2RY,X2OY,X2CR,X2SR,X2R0,X<>Y
  357. 30070  DATA L2RY,L2OY,L2CR,L2SR,L2R0,L<>X
  358. 30080  DATA DROP,P2RX,P2OX,SCO+,HEAL,CTX+,CTX=,SETX,CLRX,MSGX
  359. 30090  DATA ENDG,LMP1,LMP0,DIAG,WAIT,ECHO,RPTV,RPTN,RPTO,ELSE
  360. 30100  DATA SAVE,LOAD
  361. 30110  DATA *END
  362. 50000  ' LAST LINE
  363.